
import os


def generate_label_file(wav_path, output_label_file):
    """
    遍历wav_path目录下的所有.wav文件，读取对应的.trn文件第一行，
    生成label.txt文件，格式为：文件名(不含.wav.trn) 第一行内容
    :param wav_path: 包含wav文件和trn文件的目录路径
    :param output_label_file: 输出的label.txt文件路径
    """
    with open(output_label_file, 'w', encoding='utf-8') as out_file:
        # 遍历所有wav文件
        for (dirpath, dirnames, filenames) in os.walk(wav_path):
            for filename in filenames:
                if filename.endswith('.wav') or filename.endswith('.WAV'):
                    wav_file_path = os.path.join(dirpath, filename)

                    # 检查文件大小
                    if os.stat(wav_file_path).st_size < 240000:
                        continue

                    # 查找对应的.trn文件
                    trn_file_path = wav_file_path + '.trn'
                    if os.path.exists(trn_file_path):
                        # 读取.trn文件的第一行
                        with open(trn_file_path, 'r', encoding='utf-8') as trn_file:
                            first_line = trn_file.readline().strip()
                            if first_line:
                                # 获取不带路径和扩展名的文件名
                                basename = os.path.basename(wav_file_path)
                                file_id = basename.rsplit('.', 1)[0]  # 去掉最后一个.及之后的内容(.wav)

                                # 写入label.txt文件
                                out_file.write(f"{file_id} {first_line}\n")
                                print(f"处理文件: {file_id}")


# 使用示例
wav_directory = "D:\data_thchs30\data_thchs30\data"  # 包含wav和trn文件的目录
output_file = "label.txt"  # 输出文件名

generate_label_file(wav_directory, output_file)
print(f"标签文件已生成: {output_file}")
